package com.atguigu.eduservice.service;

import com.atguigu.eduservice.entity.EduCourse;
import com.atguigu.eduservice.entity.EduTeacher;
import com.atguigu.eduservice.entity.vo.CourseInfoVo;
import com.atguigu.eduservice.entity.vo.CoursePublishVo;
import com.atguigu.eduservice.entity.vo.frontVo.CourseQueryVo;
import com.atguigu.eduservice.entity.vo.frontVo.CourseWebVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author ZhanK
 * @since 2022-02-20
 */
public interface EduCourseService extends IService<EduCourse> {
    //添加课程信息的基本方法，数据源是前端提交的CourseInfoVo类信息，需要在实现类里面进行拆分保存到Course表里面
    String saveCourseInfoVo(CourseInfoVo courseInfoVo);
    //根据课程id查询课程的基本信息
    CourseInfoVo getCourseInfo(String courseId);
    //修改课程信息
    void updateCourseInfo(CourseInfoVo courseInfoVo);
    //查询最终发布的课程信息，里面包含了多张表的联合查询
    CoursePublishVo getPublishCourseInfo(String id);
    //课程发布后的列表分页查询，根据传入查询对象的属性进行判断，进行多条件联合查询
    Page<CoursePublishVo> getPageCourse(Page<CoursePublishVo> page, CoursePublishVo courseVo );
    //根据课程ID删除课程及章节、小节
    int deleteCourseById(String id);
    //根据前端传入对象属性的值进行查询，然后导出Excel
    List<CoursePublishVo> getPageCourseExcel(CoursePublishVo coursePublishVo);

    //Front前端客户页面课程分页查询
    Map<String, Object> getTeacherInfo(Page<EduCourse> queryVoPage, CourseQueryVo courseQueryVo);
//    Front前端页面查询出课程的详细信息，包含讲师、课程分类、课程基本信息、课程简介多表查询
    CourseWebVo getBaseCourseInfo(String courseId);
}
